#!/bin/bash

# CentOS 7.6 Python 3.8 和机器学习环境安装脚本
# 适用于信用卡违约预测项目

echo "=== CentOS 7.6 Python 3.8 环境安装脚本 ==="
echo "开始安装时间: $(date)"

# 设置错误时退出
set -e

# 配置国内YUM源
echo "1. 配置国内YUM源..."

# 备份原有YUM源
sudo mkdir -p /etc/yum.repos.d/backup
sudo mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/

# 下载阿里云CentOS 7基础源
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

# 下载阿里云EPEL源
sudo curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

# 添加SCL源（阿里云镜像）
sudo tee /etc/yum.repos.d/CentOS-SCLo-scl.repo << 'EOF'
[centos-sclo-sclo]
name=CentOS-7 - SCLo sclo
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/sclo/
gpgcheck=0
enabled=1

[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/
gpgcheck=0
enabled=1
EOF

# 清理并重建缓存
sudo yum clean all
sudo yum makecache

# 更新系统包
echo "2. 更新系统包..."
sudo yum update -y

# 安装基础开发工具
echo "3. 安装基础开发工具..."
sudo yum groupinstall -y "Development Tools"
sudo yum install -y gcc gcc-c++ make cmake
sudo yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
sudo yum install -y wget curl

# 安装Python 3.8 (使用SCL)
echo "4. 安装Python 3.8..."
sudo yum install -y rh-python38 rh-python38-python-pip rh-python38-python-devel

# 启用Python 3.8
echo "5. 启用Python 3.8..."
echo 'source /opt/rh/rh-python38/enable' >> ~/.bashrc
source ~/.bashrc

# 配置pip国内镜像
echo "6. 配置pip国内镜像..."
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

# 验证安装
echo "验证Python 3.8安装..."
python3 --version
pip --version

# 升级pip
echo "7. 升级pip..."
pip install --upgrade pip

# 安装基础包
echo "8. 安装基础科学计算包..."
pip install numpy==1.21.6
pip install pandas==1.3.5
pip install matplotlib==3.5.3

# 安装机器学习包
echo "9. 安装机器学习包..."
pip install scikit-learn==1.0.2

# 安装XGBoost (需要编译环境)
echo "10. 安装XGBoost..."
pip install xgboost==1.6.2

# 安装LightGBM (需要编译环境)
echo "11. 安装LightGBM..."
pip install lightgbm==3.3.2

# 安装不平衡学习包
echo "12. 安装不平衡学习包..."
pip install imbalanced-learn==0.8.1

# 安装TensorFlow (CPU版本) - 使用兼容版本
echo "13. 安装TensorFlow..."
pip install tensorflow==2.13.0

# 安装可视化工具
echo "14. 安装可视化工具..."
pip install scikit-plot==0.3.7
pip install openpyxl==3.0.10

# 安装内存优化工具
echo "15. 安装内存优化工具..."
pip install psutil==5.9.0

# 安装额外需要的包
echo "16. 安装额外依赖..."
pip install seaborn
pip install jupyter

# 设置环境变量
echo "17. 设置环境变量..."
echo 'alias python=python3' >> ~/.bashrc
echo 'alias pip=pip' >> ~/.bashrc

# 创建项目目录
echo "18. 创建项目目录..."
mkdir -p ~/ml_projects
cd ~/ml_projects

# 复制requirements.txt
echo "19. 创建requirements.txt..."
cat > requirements.txt << 'EOF'
# 基础科学计算包
numpy==1.21.6
pandas==1.3.5
matplotlib==3.5.3

# 机器学习包
scikit-learn==1.0.2
xgboost==1.6.2
lightgbm==3.3.2

# 不平衡学习
imbalanced-learn==0.8.1

# 深度学习包
tensorflow==2.10.0

# 可视化和其他工具
scikit-plot==0.3.7
openpyxl==3.0.10

# 内存优化包（可选）
psutil==5.9.0

# 兼容性修复
urllib3<2.0
requests<2.29
typing-extensions<4.6.0

# 额外工具
seaborn
jupyter
EOF

# 验证安装
echo "20. 验证安装..."
python3 -c "import numpy, pandas, sklearn, xgboost, lightgbm; print('基础包安装成功!')"
python3 -c "import tensorflow as tf; print(f'TensorFlow版本: {tf.__version__}')"

# 显示Python版本
echo "21. Python版本信息:"
python3 --version
pip --version

# 显示内存信息
echo "22. 系统内存信息:"
free -h

# 显示磁盘空间
echo "23. 磁盘空间信息:"
df -h

echo "=== 安装完成 ==="
echo "安装完成时间: $(date)"
echo ""
echo "使用方法:"
echo "1. 启用Python 3.8: source /opt/rh/rh-python38/enable"
echo "2. 进入项目目录: cd ~/ml_projects"
echo "3. 运行Python脚本: python3 your_script.py"
echo ""
echo "注意事项:"
echo "- 如果遇到内存不足，可以尝试分批处理数据"
echo "- 建议使用16GB以上内存的云服务器"
echo "- 可以使用 'pip list' 查看已安装的包"
echo "- 使用SCL安装Python 3.8，系统更稳定"
echo "- 已配置国内镜像源，下载速度更快"
echo "- 每次新终端需要运行: source /opt/rh/rh-python38/enable"
